# 配置全局用户名
git config --global user.name "steveouyang"

# 配置全局邮箱
git config --global user.email "284577461@qq.com"

# 查看配置
git config --list

mkdir jdzb
cd jdzb
git init 
touch README.md

# 添加一个文件到暂存区（Git三级缓存：暂存区-本地仓库-远程仓库）
# 没有添加到暂存区的文件的状态为Unstaged未受控
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/steveouyang/jdzb.git
git push -u origin "master"

# 将所有未受控文件添加到暂存区(Unstaged->Added)
git add .
# 将暂存区中的所有内容提交本地仓库（此时正式形成一个版本 Added->Modified【本地已修改/还未推送远程】）
git commit -m "添加gitcmd.sh"
# 将master分支（默认分支）推送远程仓库
git push -u origin master
# 查看本地仓库状态
git status



# ========================================
# （基于当前分支）创建dev分支
git branch dev
# 创建切换二合一
git checkout -b dev
# 切回特性分支
git checkout feature-page
# ========================================



# ========================================
# 准备添加新的开发者
# 新成员生成SSH秘钥
ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com" 
# 拷贝生成的秘钥内容 地址和文件名要使用你具体的配置
type C:\Users\Administrator\.ssh\temp\id_longge.pub
# 克隆工程到本地
# https://www.gitee.com/steveouyang/jdzb
git clone git@gitee.com:steveouyang/jdzb.git
# 显示当前工程的remote信息
git remote -v
# 修改后再推送远程
git config --global user.name "longge"
git add .
git commit -m '隆哥的提交'
# 查看提交日志
git log
# ========================================




# ========================================
# 查看当前分支
git branch
# (基于当前分支)创建分支用于构建静态页面
git branch feature-page
# 切换到指定分支
git checkout feature-page
# 提交分支内容
git add .
git commit -m "初步构建工程结构"
git push -u origin feature-page
# ========================================





# ========================================
# 将自己合并回dev分支
# 合并其它分支到当前分支
# 先将dev分支合并到当前特性分支（如果有冲突 让它爆发在特性分支上）
git merge dev
# 解决冲突
# 经过充分的友好的交流（非暴力那种）统一内容后，删除冲突标记，重新提交
git add . && git commit -m "解决了与dev的冲突"
git merge dev
# 用dev合并解决了冲突的特性分支
git checkout dev
git merge feature-page
# 删除已经彻底用完的分支
git branch -d feature-page
# ========================================



# ========================================
# 拉取远程仓库的内容到本地仓库
git fetch origin
# 本地切换到dev分支
git chekcout -b dev
# 将远程的dev分支合并到自己的dev分支
git merge origin/dev
# ========================================



# ========================================
# 应回退到最后一次提交的版本
git reset --hard HEAD
# 硬回退到指定版本（目标版本后的历史记录全部被销毁）
git reset --hard 提交id
# 将指定版本的状态克隆为最新提交（所有的历史记录都完好无损）
git revert 提交id
git reset --hard HEAD
# ========================================



# ========================================
# 克隆人家的工程
git clone https://gitee.com/steveouyang/jdzb.git
# 移除远程源
git remote remove origin
# 重新添加自己的源
git remote add 你自己的源地址
# 更好的选择是：喜欢哪个项目 直接【fork】一份到自己的账号下
# ========================================



# ========================================
# 配置的新的源地址
git remote remove origin
git remote add origin 新源的地址
# 切换新源后无论推拉皆不能成功（报错中会建议你git pull）
git push -u origin dev
# 先拉一下（隐性的关联行为）当然照样还是无法成功（...unrelated histories）
git pull origin dev
# 再次拉一下 参数中允许一下【无关联的历史记录】
git pull origin dev --allow-unrelated-histories
# 最后再重新推送即可
git push -u origin dev
# ========================================



# ========================================
# 演示掉坑
# 故意把源配错
# 先将当前好端端的源故意移除
git remote remove origin
# 查看当前源（当然并没有任何卵源）
git remote -v
# 故意配置一个错误的源
git remote add origin nimei
# 配置一个正确的源
git remote remove origin
git remote add origin https://gitee.com/steveouyang/jdzb.git
# ========================================



# ========================================
git branch feature-data
git checkout feature-data

